package com.demo.core.service.base;

import java.util.List;

import com.demo.core.model.Menu;

/**
 * Menu服务接口
 * @author ryuu.kk
 *
 */
public interface MenuService {

	/**
	 * 保存Menu模型
	 * @param menu Menu
	 * @return Long
	 */
	Long save(Menu menu);
	
	/**
	 * 存在判断
	 * @param id 主键ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 删除Menu信息
	 * @param memberId MenuID
	 * @param siteId 站点ID
	 */
	void delete(Long menuId, Long siteId);
	
	/**
	 * 更新Menu信息
	 * @param id Menu主键ID
	 * @param siteId 站点ID
	 * @param menu Menu模型
	 * @return int 操作数据条数
	 */
	int update(Long id, Long siteId, Menu menu);
	
	/**
	 * Menu可用信息
	 * @param id Menu主键ID
	 * @param siteId 站点ID
	 * @param enabled 可用
	 * @param status 状态
	 */
	void enabled(Long id, Long siteId, Boolean enabled, String status);
	
	/**
	 * 查找
	 * @param Menu主键ID
	 * @return Menu
	 */
	Menu find(Long menuId);
	
	/**
	 * 查找
	 * @param functionId Menu对应的功能模型Function主键ID
	 * @return Menu
	 */
	Menu find(Long functionId, Long siteId);
	
	/**
	 * 查找根节点的下层子节点
	 * @param pid 根节点ID (functionId Menu对应的功能模型Function主键ID)
	 * @return List<Menu>
	 */
	List<Menu> findList(Long pid, Long siteId);
	
	/**
	 * 站点的整体功能树
	 * @param siteId 站点ID
	 * @return Menu 功能树
	 */
	Menu tree(Long siteId);
	
	/**
	 * 根据根节点ID查询树形结构的Menu
	 * @param functionId Menu对应的功能模型Function主键ID
	 * @return Menu
	 */
	Menu tree(Long functionId, Long siteId);

	/**
	 * 根据根节点ID查询树形结构的Menu
	 * @param functionId Menu对应的功能模型Function主键ID
	 * @param depths 树的深度Level=1为第一层节点，依次类推
	 * @return Menu (Tree结构)
	 */
	Menu tree(Long functionId, Long siteId, int... depths);
}
